package modelo.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import jdbc.ConnectionFactory;

import modelo.Funcionario;

public class FuncionarioDAO {
	private Connection connection;

	public FuncionarioDAO() {
		this.connection = new ConnectionFactory().getConnection();
	}

	public void incluir(Funcionario funcionario) {
		String sql = "insert into funcionario (idfuncionario, nome, email, departamento, cargo, "
				+ "rg, telefone, cidade, estado, logradouro, cep) "
				+ "values(?,?,?,?,?,?,?,?,?,?,?)";

		try {
			PreparedStatement stmt = connection.prepareStatement(sql);

			stmt.setInt(1, funcionario.getIdFuncionario());
			stmt.setString(2, funcionario.getNome());
			stmt.setString(3, funcionario.getEmail());
			stmt.setString(4, funcionario.getDepartamento());
			stmt.setString(5, funcionario.getCargo());
			stmt.setString(6, funcionario.getRg());
			stmt.setString(7, funcionario.getTelefone());
			stmt.setString(8, funcionario.getCidade());
			stmt.setString(9, funcionario.getEstado());
			stmt.setString(10, funcionario.getLogradouro());
			stmt.setString(11, funcionario.getCep());

			stmt.execute();
			stmt.close();
			connection.close();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	public List<Funcionario> carrega() {
		String sql = "select * from funcionarios";
		try {
			List<Funcionario> funcionarios = new ArrayList<Funcionario>();
			PreparedStatement stmt = this.connection.prepareStatement(sql);
			ResultSet rs = stmt.executeQuery();

			while (rs.next()) {
				Funcionario funcionario = new Funcionario();

				funcionario.setIdFuncionario(rs.getInt("idfuncionarios"));
				funcionario.setNome(rs.getString("nome"));
				funcionario.setEmail(rs.getString("email"));
				funcionario.setDepartamento(rs.getString("departamento"));
				funcionario.setCargo(rs.getString("cargo"));
				funcionario.setRg(rs.getString("rg"));
				funcionario.setTelefone(rs.getString("telefone"));
				funcionario.setCidade(rs.getString("cidade"));
				funcionario.setEstado(rs.getString("estado"));
				funcionario.setLogradouro(rs.getString("logradouro"));
				funcionario.setCep(rs.getString("cep"));

				funcionarios.add(funcionario);

			}
			rs.close();
			stmt.close();

			return funcionarios;
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	public void alterar(Funcionario funcionario) {
		String sql = "update from funcionario set nome=?, cnpj=?, email=?, "
				+ "cidade=?, estado=?, logradouro=?, cep=?, telefone=? where idfuncionario=?";

		try {
			PreparedStatement stmt = connection.prepareStatement(sql);

			stmt.setString(1, funcionario.getNome());
			stmt.setString(2, funcionario.getEmail());
			stmt.setString(3, funcionario.getDepartamento());
			stmt.setString(4, funcionario.getCargo());
			stmt.setString(5, funcionario.getRg());
			stmt.setString(6, funcionario.getTelefone());
			stmt.setString(7, funcionario.getCidade());
			stmt.setString(8, funcionario.getEstado());
			stmt.setString(9, funcionario.getLogradouro());
			stmt.setString(10, funcionario.getCep());
			stmt.setInt(11, funcionario.getIdFuncionario());

			stmt.execute();
			stmt.close();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	public void remover(Funcionario funcionario) {
		String sql = "remove from funcionario where id=?";

		try {
			PreparedStatement stmt = connection.prepareStatement(sql);
			stmt.setInt(1, funcionario.getIdFuncionario());

			stmt.execute();
			stmt.close();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
}
